Top 10k strings from ROM Routinen (1987)(Klaus Jahn)(de).tzx
in <root> / bin / z80 / software / Sinclair Spectrum Collection TOSEC.exe / Sinclair ZX Spectrum - Utilities & Educational / Sinclair ZX Spectrum - Utilities & Educational - [TZX] (TOSEC-v2007-01-01) /
Back to the directory listing
2 a$="Alles klar ! Seite "+s$+" erscheint sofort.": 2 Bitte Cassettenrekorder ab- stellen ! 2 =copy 2 = zurueck 2 = vor 2 = Seite anwaehlen 1 x8DDD8|($$ 1 und auf 'v' druecken ! 1 r$=r$+"\"+ 1 j$="X , Y ": 1 h$="X , Y , Z ": 1 g$="Opcode Operation Stack vorher / nachher" 1 c$=" auf Calculatorstack legen" 1 bQIIF"AII6 1 b4 _ 1 b3 1 b2 ^ 1 b1 I 1 a$="Welche Seite moechten Sie sehen [1..24] ?\"+ 1 a$="Welche Seite moechten Sie sehen [1..17] ?\"+ 1 ROM Teil 2 1 ROM Teil 1 1 Cassettenrekorder einschalten 1 @@@@@H~IIB TT8@ 1 6III6&III> 1 +"nuetzlichen ROM-Routinen und des\"+ 1 +"Zum Stoppen eine Taste druecken...": 1 +"Calculators rst 40." 1 +" call 6037~~hl = hl * de:\"+ 1 +" call 5829" 1 +" call 5808~~Berechnen einer Bildschirm-Pixel-Adresse~nach hl. Angegeben wird die (X,Y)-~Pixelposition:~~a) ld c,{X-Koordinate}~b) ld b,{Y-Koordinate}~c) call 8874~d) hl gibt die SCREEN$-Adresse an." 1 +" call 4656" 1 +" call 4185~~BASIC-Zeilenkursor runter:\"+ 1 +" call 4083" 1 +" call 3884~~Ausgabe eines Listings:\"+ 1 +" call 12457" 1 +" call 12171~~Scrollen einer bestimmten Bildzeilen-~zahl (von unten gesehen):~~a) ld b,{Zeilenzahl}~b) call 3584" 1 +" call 11747" 1 +" call 11733" 1 +" call 11682" 1 +" call 11563" 1 +" call 11560" 1 +" call 11547~Akku auf Buchstabencode pruefen:call 11405~Akku auf alphanumerisch pruefen:call 11400" 1 )+"~ 3","0507","-","0517",h$+"X ,(Y - Z)~ 4","0607","*","0617",h$+"X ,(Y * Z)~ 5","0707","/","0717",h$+"X ,(Y / Z)" 1 )+") ausgedruckt, da die~beiden Opcodes zum verdoppeln ueber-~sprungen worden sind." 1 (DD88DDD 8DD( 1 'EEE9>III2 1 "8","0600"," 1 "8","0100","Opcode: Ausfuehrung:~~ 51","0308","unbedingter Sprung~ 0","0408","Sprung nur dann, wenn das","0508","oberste Calculatorelement","0608","ungleich null ist." 1 "7","0100","BASIC-Programm loeschen:\"+ 1 "6","0710"," 1 "6","0122","SIN(x/80*PI) , 23g) rst 40~ Byt. #4 *","0322","23*SIN(x/80*PI)~ Byt. #164 10","0422","23*SIN(x/80*PI) , 10 Byt. #15 +","0522","10+23*SIN(x/80*PI)~ Byt. #56 End.~h) ret~i) das Ergebnis liegt dann auf dem~Calculatorstack !" 1 "6","0100",o$,"0100",v$+v$+v$+v$+v$,"0600",o$ 1 "5","0100","a) rst 40 Calculatoraufruf~b) Byt. #163 PI/2 auf Calculatorstack~c) Byt. #51 Sprung~ Byt. #3 3 Bytes sollen ueber-","0516","sprungen werden" 1 "4","1005"," 1 "37","0100",g$+"~~ 1","0307","tauschen","0317",h$+"X , Z , Y~ 2","0407","loeschen","0417",h$+h$( 1 "35","0100",g$+"~~ 41","0307","SGN"+r$,"0317",h$+"X,Y,(SGN Z) 42","0407","ABS","0417",h$+"X,Y,(ABS Z) 43","0507","PEEK","0517",h$+"X,Y,(PEEK Z) 44","0607","IN","0617",h$+"X,Y,(IN Z)~ 49","0707","dupliz.","0717",h$+"X, Y, Z, Z" 1 "33","0100",g$+"~~ 9 ,b"+r$,"0307","<=","0317","X , Y","0330","1 wenn X<=Y","0430","0 wenn X>Y~ 10 ,b","0507",">=","0517","X , Y","0530","1 wenn X>=Y","0630","0 wenn X<Y~ 11 ,b","0707","<>","0717","X , Y","0730","1 wenn X<>Y","0830","0 wenn X=Y" 1 "3","0100","SAVE Header:~~a) ld ix,{Startadresse des Headers}~b) ld de,17~c) xor a~d) call 1218 SAVE-Routine" 1 "3","0100","PLOT x,y:~~a) ld c,{x} X-Koordinate in c~b) ld b,{y} Y-Koordinate in b~c) call 8927 PLOT-Routine" 1 "3","0100","LOAD CODE:~~a) ld ix,{Anfangsadresse des Codes}~b) ld de,{Laenge des Codes}~c) ld a,255~d) scf~e) call 1366 LOAD-Routine" 1 "3","0100","Es gibt aber hier auch die Funktionen,~die mit Strings arbeiten; z.B. wandelt~die STR$-Funktion einen numerischen Aus-~druck in einen Stringausdruck um.~Wenn man das mit dem Calculator tut,~so mu@ man ein Stringparameter auch als~solches vom Calculatorstack herunter-~holen und nicht etwa als Zahl." 1 "3","0100","BEEP x/y,z:~~a) ld a,{x} Dividend der Tonlaenge~ call 11560 "+c$+"~b) ld a,{y} Divisor der Tonlaenge~ call 11560 "+c$ 1 "3","0100","#3 Ausdruck auf Drucker~#2 Ausdruck auf Screen Zeile 0 bis 21~#1 Ausdruck auf Screen Zeile 22 bis 23~#0 -""-~#255 Workspace~#254 Keyboard" 1 "23","0100",g$+"~~ 19 ,b"+r$,"0307","<> String X$ , Y$","0330","1 wenn X<>Y$","0430","0 wenn X$=Y$ 20 ,b","0508","> String X$ , Y$","0530","1 wenn X$>Y$","0630","0 wenn X<=Y$" 1 "2","0100","a) ld de,60000 {Startadresse}~b) ld bc,16 {Laenge}~c) xor a~d) call 10934 Parameter auf Calc.stack~e) ld b,29 Opcode von VAL nach b~f) call 13790 VAL/VAL$-Routine~g) Das Ergebnis liegt auf dem Calculator-~ stack." 1 "2","0100","a) call 3405~b) Festlegung der gewuenschten Farb-~anweisung mit rst 16~c) call 7341~~MEM-Anweisung:~~a) call 7962~b) ld hl,65535~c) and a~d) sbc hl,bc~e) der in BASIC noch verfuegbare Bereich~ steht jetzt im hl-Register." 1 "2","0100","VERIFY CODE:~~a) ld ix,{Startadresse des Codes}~b) ld de,{Laenge der Codes}~c) ld a,255~d) and a~call 1366 LOAD-Routine" 1 "2","0100","Um eine Kopie des obersten Calculator-~stackwertes in eine dieser Speicherzellen zu bringen, benutzt man die Opcodes~192 bis 197.~Um den Inhalt einer dieser Speicher auf~den Calculatorstack zu legen, benutzt~man die Opcodes~224 bis 229." 1 "2","0100","Sie haben sich bestimmt schon darueber~geaergert, dass Sie In Maschinensprache~auf den BASIC-Komfort verzichten mu@ten.~Das soll sich nun auch fuer Sie aendern.~Ich gebe Ihnen hier eine komplette Auf-~listung der gesamten nuetzlichen ROM-~Routinen im Spectrum-ROM." 1 "2","0100","PRINT x: {x liegt im Bereich 0 - 9999}~~a) ld bc,{x} Zahl in bc-Register bringenb) call 6683 Zeilennummerdruck-Routine~~PRINT x:~~a) ld bc,{x} Zahl~b) call 11563 "+c$+"~c) call 11747 Zahlenausdruck." 1 "2","0100","POINT (x,y):~~a) ld c,{x}~b) ld b,{y}~c) call 8910~d) call 7833~e) Ergebnis (1 oder 0) befindet sich im Akku.~~SCREEN$ (y,x):~~a) ld a,{y} Y-Koordinate~ call 11560 "+c$+"~b) ld a,{x} X-Koordinate~ call 11560 "+c$+"~c) call 9525 SCREEN$-Routine~d) call 11249 String-Parameter vom Cal-" 1 "2","0100","Loeschen von Calculatorstack,~Workspace und Editorspace:\"+ 1 "2","0100","Loeschen einer bestimmten Bildzeilen-~zahl (von unten gesehen):~~a) ld b,{Zeilenzahl}~b) call 3652~~Ausgabe einer Fehlermeldung:~~Dazu wird der Befehl rst 8 benutzt. Der~Code der Fehlermeldung wird einfach als~ein Byte dem rst 8-Befehl angefuegt.~Man befindet sich nach aufruf dieses~Befehls sofort wieder im BASIC.~Z.B. wird die Meldung 0 OK so gemacht:" 1 "2","0100","Jetzt befinden sich die Stringparameter~(Laenge und Startadresse) in den~Registern bc und de. Um das Ergebnis~der Funktion SCREEN$ zu bekommen,~schreibt man einfach:~~e) ld a,(de)~~und das Ergebnis (der ASCII-Code)~befindet sich im Akku." 1 "2","0100","FARBEN FESTLEGEN:~~Als Beispiel geben wir uns an, wie die~Befehle~~PAPER 7: INK 9: OVER 1 in Assembler~aussehen:\"+ 1 "2","0100","Des Weiteren gibt es Testfunktionen,~die als Ergebnis entweder eine 1 (wahr)~oder eine 0 (falsch) liefern.~Um Speicherplatz zu sparen, wurden alle 12Vergleichsoperationen in eine Routine~gepackt. Zur Unterscheidung dient in dem~Falle das b-Register, denn man mu@ hier~den Opcode zusaetzlich ins b-Register la-~den." 1 "2","0100","Der Calculator:~~Wie man mit dem rst 40-Befehl umgeht,~haben Sie ja schon bei dem BEEP-Befehl~gesehen. Der Calculator kann immer nur~den obersten oder die obersten 2 Calcula-~torstack-Elemente behandeln. Das Ergeb-~nis wird dann wieder auf den Stack~zurueckgelegt.~Ich gebe Ihnen jetzt eine komplette~Auflistung der so genannten Calculator-~opcodes, die die saemtlichen Spectrum-~Funktionen darstellen." 1 "2","0100","DRAW x,y,z:~~a) X- und Y- Koordinaten wie bei~ DRAW x,y auf den Calculatorstack~ bringen~b) ld a,{z} Radiantenzahl~ call 11560 "+c$+"~c) hl' -Register sichern (siehe DRAW x,y)" 1 "2","0100","CLS: call 3435~~COPY: call 3756~~DRAW x,y:~~a) ld a,{x} X-Koordinate~ call 11560 "+c$+"~b) ld a,{y} Y-Koordinate~ call 11560 "+c$ 1 "2","0100","Bei folgenden 3 Pruefroutinen trifft~die Bedingung zu, wenn das Carry-Flag~=0 ist:~~Akku auf Zifferncode pruefen:\"+ 1 "2","0100","BRIGHT x: [siehe ""Farben setzen""]~~CIRCLE x,y,z:~~a) ld a,{x} X-Koordinate~ call 11560 "+c$+"~b) ld a,{y} Y-Koordinate~ call 11560 "+c$+"~c) ld a,{z} Radius~ call 11560 "+c$ 1 "2","0100","Ausrechnen eines Terms, der als String~im Speicher steht:~~Dazu benutzt man die VAL/VAL$-Routine.~Sie beginnt ab Adresse 13790; die Unter-~scheidung von VAL und VAL$ erfolgt~wieder ueber das b-Register.~VAL hat den Operationscode 29~VAL$ hat den Operationscode 24." 1 "1900","Sehen Sie nun auch diese Funktionen:" 1 "1815","culatorstack holen~[weiter auf der naechsten Seite !]" 1 "1801","58","1807","Int.-Teil","1907","schneiden "+h$+"X,Y, Z-INT Z" 1 "1800","Druecken Sie 'v', so wird das Programm~beendet." 1 "1700","obersten Calculatorstackwert~ins bc-Registerpaar bringen:\"+ 1 "1700","SCROLL: call 3282~~STOP: call 7406" 1 "1700","MEM0 , MEM1 , MEM2 , MEM3 , MEM4 , MEM5" 1 "17","0100",g$+"~~ 30","0307","LEN"+r$,"0317","X , Y$","0330","X , LEN Y$~ 46","0407","STR$","0417",h$+"X,Y,STR$ Z~ 47","0507","CHR$","0517",h$+"X,Y,CHR$ Z~ 25","0607","USR","0617","X , Y$","0630","X , USR Y$" 1 "1603","Byt. #31 SIN","1625","SIN (x/80*PI)~ Byt. #56 End.~e) ld a,23~f) call 11560","1925","SIN(x/80*PI) , 23" 1 "1600","a) rst 8~b) Byt. #255 {Meldecode minus 1}" 1 "1500",o$+" 17 ,b","1607","<= String X$ , Y$","1630","1 wenn X<=Y$","1730","0 wenn X$>Y$ 18 ,b","1807",">= String X$ , Y$","1830","1 wenn X>=Y$","1930","0 wenn X$<Y$" 1 "1500","PAUSE x:~~a) res 5,(iy+1) Eingabe freimachen~b) ld bc,{x} Laenge in msec. nach bc~c) call 7997" 1 "1500","Es wird also nicht PI, sondern PI/2~(= "+ 1 "1500","EDIT:\"+ 1 "1500","BORDER x:~~a) ld a,{x} Farbe in Akku bringen~b) call 8859 BORDER-Routine aufrufen." 1 "1401","35","1407","ACS","1417",h$+"X,Y,(ACS Z) 36","1507","ATN"+r$,"1517",h$+"X,Y,(ATN Z) 37","1607","LN","1617",h$+"X,Y,(LN Z)~ 38","1707","EXP","1717",h$+"X,Y,(EXP Z) 39","1807","INT","1817",h$+"X,Y,(INT Z) 40","1907","SQR","1917",h$+"X,Y,(SQR Z)" 1 "1400","obersten Calculatorstackwert~in den Akku bringen:\"+ 1 "1400","Diese Opcodes werden einfach als Bytes~hinter dem rst 40-Befehl angefuegt." 1 "1400","164","1407","10","1417",j$+"X,Y, 10~ 8","1507","AND","1517",h$+"X,(Y AND Z)~ 7","1607","OR","1617",h$+"X,(Y OR Z)~ 48","1707","NOT","1717",j$+"X , (NOT Y)" 1 "14","0100","Wir mue@ten zuerst x auf den Calculator-~Stack legen und dann von innen nach~au@en fertigrechnen:~~a) X liegt auf Stack","0525","X~b) ld a,80~c) call 11560","0725","X , 80~d) rst 40~ Byt. #5 /","0925","X / 8~ Byt. #163 PI/2","1025","(X/80) , PI/2" 1 "1300","a) ld a,{x} Kanalnummer in Akku~b) call 5633 Kanal oeffnen~~Die Kanaele lauten (siehe naechste Seite):" 1 "1300","a = c + 10 * a:\"+ 1 "1300","PRINT a$:~~a) ld de,{Startadresse der Zeichenkette}~b) ld bc,{Laenge der Zeichenkette}~c) call 8252 Textdruck." 1 "1201","54","1207","< 0","1217","X","1230","1 wenn X<0","1330","0 wenn X>=0 55","1407","> 0","1417","X","1430","1 wenn X>0","1530","0 wenn X<=0" 1 "1200","PRINT AT y,x:~~a) ld b,{24-y}~b) ld c,{33-x}~c) call 3545" 1 "1200","ATTR (y,x):~~a) ld c,{y}~b) ld b,{x}~c) call 9603~d) call 7833~e) Das Ergebnis steht im c-Register." 1 "1103","Byt. #49 DUPLICATE","1125","(X/80) ,PI/2,PI/2 Byt. #15 +","1225","(X/80) ,PI/2+PI/2","1325","(X/80) , PI~ Byt. #4 *","1425","(x/80) * PI","1525","(x/80*PI)" 1 "1100","d) exx~ push hl hl' - Register sichern~ exx~e) call 9005 CIRCLE-Routine aufrufen~f) exx~ pop hl hl' - Register holen.~ exx" 1 "1100","c) exx~ push hl hl' - Register sichern~ exx~d) call 9335 DRAW I - Routine~e) exx~ pop hl hl' - Register holen.~ exx" 1 "1100","bc - Registerinhalt~"+c$+":\"+ 1 "1100","Neben den BASIC-Funktionen stehen dem~Calculator auch noch 6 Speicher zu~Verfuegung, in die er Werte bringen~kann. Diese 6 Speicher werden wie folgt~bezeichnet:" 1 "1100","Man kann z.B. mit der VAL-Routine eine~mathenatische Aufgabe loesen, aehnlich~PRINT VAL ""12 * SIN (n/PI)"".~Nehmen wir an, unsere Aufgabe steht~ab Adresse 60000 und ist 16 Bytes lang.~So schreiben wir:" 1 "1100","Es gibt sogar Calculatoropcodes zum~Ueberspringen von Opcodes. Dazu gibt man~hinter dem Befehlsopcode die Anzahl der~zu ueberspringenden Opcodes an; diese kannauch negativ sein, um rueckwaerts zu~springen." 1 "1100","Ausgabe von Text, dessen letztes Byte mit~gesetztem bit 7 markiert ist:~~a) ld de,{Startadresse des Textes}~b) call 3082~~BASIC-Zeilenkursor hoch:\"+ 1 "1000","Und nun zum Schlu@ moechte ich Ihnen noch zeigen, wie man mit dem rst 40-Befehl~umgeht.~Man kann naemlich mehrere Operationen~hintereinander ausfuehren.~Nehmen wir z.B. an, wir wollten den Term~~ 10 + 23 * SIN ( x / 80 * PI )~~mit dem Calculator berechnen." 1 "1000","Sie erinnern sich: Mit call 11249 kann~man ein Stringparameter, welches auf dem~Calculatorstack liegt, in die Register~bc (die Stringlaenge) und de (die Start-~adresse des Strings) bringen.~Umgekehrt kann man die Inhalte dieser~beiden Registerpaare als Stringparameter~mit call 10929 auf den Calculatorstapel~bringen." 1 "1000","In der folgenden Tafel sind diese Opera-~tionen mit , b gekennzeichnet.~Beachten Sie, da@ es 6 Vergleichs-~operationen fuer numerische Operanden~und 6 fuer Stringoperanden gibt !" 1 "1","0100","Stringdefinition:~~Man kann einen String schaffen, indem man~seine Startadresse ins de- und seine~Laenge ins bc-Register bringt.~Der Akku mu@ 0 sein; dann werden diese~5 Bytes mit der Routine~~ call 10929~auf den Calculatorstack gebracht.~~Mit der Routine~ call 11249~hingegen kann man ein Stringparameter~vom Calculatorstapel herunterholen." 1 "1","0100","LIST x:~~a) ld hl,{Startadresse von Zeile x}~b) call 6229~~LOAD Header:~~a) ld ix,{Anfangsadresse des Headers}~b) ld de,17~c) xor a~d) scf~e) call 1366 LOAD-Routine" 1 "1","0100","Im Folgenden sehen Sie eine Liste, in der~die Calculatoropcodes, also saemtliche~BASIC-Funktionen des Spectrum aufgefuehrt~sind.~Bei jedem Opcode sehen Sie auch die~Calculatorsack-Manipulation durch die~Operationen.~In der nun folgenden Liste ist immer das~rechteste Calculatorstack-Element das~oberste auf dem Stack liegende Element !" 1 "0900","d) call 9108 DRAW II - Routine~e) hl' -Register holen (Siehe DRAW x,y).~~FLASH: [siehe ""Farben festlegen""]~~INK: [siehe ""Farben festlegen""]~~INVERSE: [siehe ""Farben festlegen""]" 1 "0900","SOUND x,y:~~(Erzeugt einen kurzen Pfeifton. x ist~die Tontiefe und liegt im Bereich~[1..65535]. y ist die Tonlaenge und~liegt im Bereich [0..65535].)~~a) ld hl,{x}~b) ld de,{y}~c) call 949" 1 "0900","SAVE CODE:~~a) ld ix,{Startadresse des Codes}~b) ld de,{Laenge des Codes}~c) ld a,255~d) call 1218 SAVE-Routine." 1 "0900","NEW: call 4535~~OVER: [siehe ""Farben festlegen""]~~PAPER: [siehe ""Farben festlegen""]" 1 "0900"," 12 ,b","0907"," >","0917","X , Y","0930","1 wenn X>Y","1030","0 wenn X<=Y~ 13 ,b","1107"," <","1117","X , Y","1130","1 wenn X<Y","1230","0 wenn X>=Y~ 14 ,b","1307"," =","1317","X , Y","1330","1 wenn X=Y","1430","0 wenn X<>Y" 1 "0802","6","0807","^","0817",h$+"X ,(Y ^ Z)~ 15","0907","+","0917",h$+"X ,(Y + Z)~ 31","1007","SIN","1017",h$+"X,Y,(SIN Z) 32","1107","COS","1117",h$+"X,Y,(COS Z) 33","1207","TAN","1217",h$+"X,Y,(TAN Z) 34","1307","ASN","1317",h$+"X,Y,(ASN Z)" 1 "0801","50","0807","MOD/DIV","0817",j$+"Rest , (X/Y) 56","0907","End Calc.~160","1007","0","1017",j$+"X,Y, 0~161","1107","1","1117",j$+"X,Y, 1~162","1207","0.5","1217",j$+"X,Y, 0.5~163","1307","PI/2","1317",j$+"X,Y, 1.5707" 1 "0800","PRINT CHR$(x):~~a) ld a,{x} Code des Zeichens in Akku~b) rst 16 Ausdruck" 1 "0800","Die normale temporaere Farbzuweisung~geschieht ganz einfach mit rst 16.~Soll z.B. PAPER 7 ausgedrueckt werden,~so schreibt man:~~a) ld a,17 (=ASCII-Code von PAPER)~b) rst 16~c) ld a,7 (fuer PAPER 7)~d) rst 16~~Sollen die Farben allerdings bleiben~(nach CLS oder PRINT #), dann mu@ man mit~folgenden call-Befehlen arbeiten:" 1 "0800","Au@erdem nenne ich Ihnen die Anwendung~mit den Registern, die die Routinen be-~nutzen.~Sie werden sehen, da@ einige Routinen mit~dem so genannten Calculatorstack arbeiten;dieser ist eine Art Stapel, um 5-Byte-~Fliesskommazahlen oder Stringparameter~abzuspeichern, aber dazu Spaeter mehr !~Ich zeige Ihnen jetzt die wichtigsten~Routinen:" 1 "0800","Akkuinhalt~"+c$+":\"+ 1 "0701","53 ,b Springt nur, wenn das b-Register","0808","ungleich Null ist. Au@erdem wird","0908","das b-Register dekrementiert.~~Bitte sehen Sie sich dazu noch das~Beispiel auf der naechsten Seite an !" 1 "0701","28","0707","CODE","0717","X , Y$","0730","X , CODE Y$~ 23","0807","String + X , Y$ , Z$ X , Y$ + Z$~"+o$+" 27","1007","negieren "+h$+"X , Y , (-Z)" 1 "0701","21 ,b","0708","< String X$ , Y$","0730","1 wenn X$<Y$","0830","0 wenn X>=Y$ 22 ,b","0908","= String X$ , Y$","0930","1 wenn X$=Y$","1030","0 wenn X<>Y$"+o$ 1 "0700","c) rst 40 Calculatoraufruf~ Byt. #5 Zahlen dividieren~ Byt. #56 Ende des Calculators~d) ld a,{z} Tonhoehe~ call 11560 "+c$+"~e) call 1016 BEEP-Routine aufrufen." 1 "0700","PRINT #x:~~Bevor man irgendetwas zum erstenmal aus-~druckt, mu@ der Bildkanal mit PRINT#~geoeffnet werden ! Das geschieht so:" 1 "0600","d) Byt. #49 PI/2 duplizieren~e) Byt. #15 PI/2 + PI/2 (=PI)~f) Byt. #56 End of Calculator~g) ld a,2~ call 5633 Kanal #2 oeffnen~h) call 11747 Oberstes Calculatorelement wird ausgedruckt.~i) ret" 1 "0500","Ausdruck des obersten~Calculatorstackwertes:\"+ 1 "0411","---,\"+ 1 "0404","Die nuetzlichsten","1220","ROUTINEN","1802"," 1 "0300","Calculatorstack loeschen:\"+ 1 "0201","So, das war die Erklaerung aller\"+ 1 ","1909"," 1 ","1806"," 1 ","1706"," 1 ","1606"," 1 ","1506"," 1 ","1305"," 1 ","1205"," 1 ","1105"," 1 ","0910"," 1 ","0810"," 1 1987 written by Klaus Jahn" 1 1987 by OMIKRON-Software~all programs & MC-Routines written by~Klaus Jahn, 6432 Heringen 1, W-Germany" 1